NOTE
6.2 Linux cgroup
1. Linux cgroup历史 - Google的工程师开发了process containers,之后重命名为control group - Linux 内核 2.6版本支持了cgroup 2. 什么是Linux cgroup limits how much you can use Linux
这是历史学习笔记,可能存在过时或不完整的理解。
1. Linux cgroup历史
- Google的工程师开发了process containers,之后重命名为control group
- Linux 内核 2.6版本支持了cgroup
2. 什么是Linux cgroup
2026 注:本文记录的是较早期的 cgroup 使用方式;现代 Linux 发行版普遍以 cgroup v2 为主。 limits how much you can use Linux内核的一种特性,限制进程的资源使用。这些资源包括CPU、内存、磁盘IO、网络等
3. 为什么需要Linux cgroup
通过限制资源的使用率从而支持虚拟化,比如容器技术
4. 如何使用Linux cgroup
cgroup给用户暴露的接口是操作系统文件,位于/sys/fs/cgroup下
4.1. 查看进程所属的 cgroups
/proc/[pid]/cgroup
4.2. 限制进程可用的CPU
- 创建控制组
cd /sys/fs/cgroup/cpu
mkdir container
ls container/
cgroup.clone_children cpu.cfs_period_us cpu.rt_period_us cpu.shares notify_on_release
cgroup.procs cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat tasks
- 写一个死循环的程序并运行
while : ; do : ; done &
[1] 226
- 配置CPU子系统:每100 ms的时间里,被该控制组限制的进程只能使用20 ms的CPU时间,也就是说这个进程只能使用到20%的CPU带宽
echo 100000 > container/cpu.cfs_period_us
echo 20000 > container/cpu.cfs_quota_us
- cgroup限制task
echo 226 > /sys/fs/cgroup/cpu/container/tasks
# 或者
cgexec -g cpu:container ./需要限制的程序
- 使用top或者time命令验证
5. Linux cgroup缺点
5.1. /proc
Linux下的/proc目录存储的是记录当前内核运行状态的一系列特殊文件,用户可以通过访问这些文件,查看系统以及当前正在运行的进程的信息,比如CPU使用情况、内存占用率等,这些文件也是top指令查看系统信息的主要数据来源。
但是,你如果在容器里执行top指令,就会发现,它显示的信息居然是宿主机的CPU和内存数据,而不是当前容器的数据。
造成这个问题的原因就是,/proc文件系统并不知道用户通过Cgroups给这个容器做了什么样的资源限制,即:/proc文件系统不了解Cgroups限制的存在